package collections

import "sync"

// 使用 syncMap + empty struct 实现 set结构
// 空的结构体是不占用内存的
var emptyStruct = struct {
}{}

type Set struct {
	m sync.Map
}

func (s *Set) Add(element interface{}) {
	// todo: 对类型过滤，map的key必须是可比较的
	s.m.Store(element, emptyStruct)
}

func (s *Set) Get(element interface{}) interface{} {
	res, ok := s.m.Load(element)
	if !ok {
		return nil
	}
	return res
}

func (s *Set) ContainsKey(key interface{}) bool {
	res := s.Get(key)
	var flag = false
	if res != nil {
		flag = true
	}
	return flag
}
